//#define _CRT_SECURE_NO_WARNINGS
//
//#include<iostream>
//#include <cmath>
//using namespace std;
//
//class Point {
//private:
//	float x;
//	float y;
//public:
//	Point(float a=0, float b=0)
//	{
//		x = a;
//		y = b;
//		cout << "Point(" << x << "," << y << ")" << endl;
//	}
//	friend float dis(Point p1, Point p2);
//	void setx(float a)
//	{
//		x = a;
//	}
//	void sety(float a)
//	{
//		y = a;
//	}
//	void show()
//	{
//		cout << "(" << x << "," << y << ")" << endl;
//	}
//	float distance() 
//	{
//		return sqrt(x*x+y*y);
//	}
//	//~Point()
//	//{
//	//	cout << "~Point():" << x << "," << y << endl;
//	//}
//};
//float dis(Point p1, Point p2)
//{
//	return sqrt(pow((p1.x - p2.x), 2) + pow((p1.y - p2.y), 2));
//}
//int main()
//{
//	Point p1;
//	float x, y;
//	cin >> x >> y;
//	p1.setx(x), p1.sety(y);
//	p1.show();
//	cout << p1.distance() << endl;
//	return 0;
//}

//#include <iostream>
//using namespace std;
//
//class exam {
//private:
//	int x;
//public:
//	exam(int n)
//	{
//		x = n;
//	}
//	int get_x()
//	{
//		return x;
//	}
//};
//
//int main()
//{
//	exam ob1[4] = { 11,22,33,44 };
//	for (int i = 0; i < 4; i++)
//		cout << ob1[i].get_x() << ' ';
//	return 0;
//}

//#include <iostream>
//using namespace std;
//
//class exam {
//private:
//	int x;
//public:
//	exam()
//	{
//		x = 1234;
//	}
//	exam(int n)
//	{
//		x = n;
//	}
//	int get_x()
//	{
//		return x;
//	}
//};
//
//int main()
//{
//	exam ob1[4] = { 11,22,33,44 };
//	exam ob2[4] = { 55,66 };
//
//	for (int i = 0; i < 4; i++)
//		cout << ob1[i].get_x() << ' ';
//	cout << endl;
//	for (int i = 0; i < 4; i++)
//		cout << ob2[i].get_x() << ' ';
//	return 0;
//}

//#include <iostream>
//#include <cmath>
//using namespace std;
//
//class exe {
//private:
//	int x;
//public:
//	void set_a(int n)
//	{
//		x = n;
//	}
//	void show_a()
//	{
//		cout << x << endl;
//	}
//};
//
//int main()
//{
//	exe ob;
//	exe *p;
//	int x = 0;
//	cin >> x;
//	ob.set_a(x);
//	ob.show_a();
//	p = &ob;
//	p->show_a();
//	(*p).show_a();
//	return 0;
//}

//#include <iostream>
//using namespace std;
//
//class A {
//private:
//	int x;
//public:
//	A(int n)
//	{
//		x = n;
//	}
//	void disp()
//	{
//		cout << "x=" << x << endl;
//	}
//};
//
//int main()
//{
//	A a(1), b(2);
//	cout << "a:";
//	a.disp();
//	cout << "b:";
//	b.disp();
//	return 0;
//}

//#include <iostream>
//using namespace std;
//
//class A {
//private:
//	int x;
//public:
//	A(int n)
//	{
//		x = n;
//	}
//	void disp()
//	{
//		cout << "this ="<<this<<" when x=" << x << endl;
//	}
//};
//
//int main()
//{
//	A a(1), b(2),c(3);
//	cout << "a:";
//	a.disp();
//	cout << "b:";
//	b.disp();
//	c.disp();
//	return 0;
//}

#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int n = nums.size();
        vector<int> dp(n);
        dp[0] = 1;
        int ret = 1;
        for (int i = 1; i < n; i++)
        {
            dp[i] = 1;
            for (int j = 0; j < i; j++)
            {
                if (nums[i] > nums[j])
                    dp[i] = max(dp[i], dp[j] + 1);
            }
            ret = max(dp[i], ret);
        }
        return dp[n - 1];
    }
};

int main()
{
    Solution s;
    vector<int> nums = { 0,1,0,3,2,3 };
    s.lengthOfLIS(nums);
    return 0;
}